/*
 * PrecioHoraPane.java
 *
 * Created on 26 de junio de 2006, 10:46 AM
 */

package inc.jmc.cyberboard.ztrashcan;
import inc.jmc.cyberboard.ui.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.border.TitledBorder;
import inc.jmc.cyberboard.common.*;
import inc.jmc.cyberboard.*;
import java.awt.image.BufferedImage;
import javax.swing.table.DefaultTableModel;
import inc.jmc.cyberboard.log.Log;
import org.apache.log4j.Logger;
        
/**
 *
 * @author  Juan Miguel Olguin Salguero
 */
public class PrecioHoraSegmentPane_1 extends javax.swing.JPanel {
    
    static Logger logger = Logger.getLogger(PrecioHoraSegmentPane.class.getName());
    private javax.swing.border.TitledBorder titBorder1=javax.swing.BorderFactory.createTitledBorder(null, "primera hora", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 14), new java.awt.Color(204, 0, 0));
    private Tarifa tarifa=new Tarifa(0,0,0);

    public void setTitBorder1(TitledBorder titBorder1) {
        this.titBorder1 = titBorder1;
    }

    public TitledBorder getTitBorder1() {
        return titBorder1;
    }

    
    private javax.swing.table.DefaultTableModel defTableModel1=null;

    public DefaultTableModel getDefTableModel1() {
        return defTableModel1;
    }

    java.text.NumberFormat nf2= java.text.NumberFormat.getInstance();
    /** Creates new form PrecioHoraPane */
    public PrecioHoraSegmentPane_1(String titulo) {
        initComponents();
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, titulo, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 14)));
        preciosTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][]{},new String[]{}));
        this.preciosTable.setFont(DefaultLookAndFeel.TableFont2);
        this.preciosTable.setBackground(DefaultLookAndFeel.TableBackground);
        this.preciosTable.setRowHeight(DefaultLookAndFeel.TableRowHeight);
        this.updateUI();
        nf2.setMaximumFractionDigits(1);
        nf2.setMinimumFractionDigits(1);
        
        
    }
void setTarifaIntervalos(int divisiones,Float precioIncremento)
    {
        String []  titulos=new String []{"Fracc.","Intervalo Tiempo","Precio"};
        Object [][] content=new Object [divisiones][3];
        ////
        //estableciendo los titulos para la tabla
        float increm=60.0f/(float)divisiones;
        
        for(int i=0;i<divisiones;++i)
        {
            
            float inf=increm*i;
            /*if(inf==1)
                inf=0;*/
            float sup=increm*(i+1);
            String intervalo="["+nf2.format(inf)+" - "+nf2.format(sup)+" ] mins";
            if(precioIncremento!=null)
            {
                    content[i][0]=""+(i+1);
                    content[i][1]=intervalo;
                    content[i][2]=NumFormat.money(precioIncremento.floatValue()*(i+1));
            }
            else
            {
                    content[i][0]="";
                    content[i][1]="";
                    content[i][2]="";
            }
        
        }
        defTableModel1=new javax.swing.table.DefaultTableModel(content,titulos);
        preciosTable.setModel(defTableModel1);
        preciosTable.getColumnModel().getColumn(0).setWidth(7);
        preciosTable.getColumnModel().getColumn(1).setWidth(4*20);
        preciosTable.getColumnModel().getColumn(2).setWidth(5*5);
        preciosTable.getColumnModel().getColumn(0).setPreferredWidth(7);
        preciosTable.getColumnModel().getColumn(1).setPreferredWidth(4*20);
        preciosTable.getColumnModel().getColumn(2).setPreferredWidth(5*5);
        //Aqui deshabilitamos la edicion de las columnas deseadas
        //por eso ponemos un JTextField sin permisos para editar, y lo establecemos como el 
        //editor de celda por default para esas columnas
        JTextField aux1=new javax.swing.JTextField();
        aux1.setEditable(false);
        javax.swing.DefaultCellEditor aux2=new javax.swing.DefaultCellEditor(aux1);
        //for(int i=0;i<10;++i)
        //{
            preciosTable.getColumnModel().getColumn(0).setCellEditor(aux2);
            preciosTable.getColumnModel().getColumn(1).setCellEditor(aux2);
        //}
        
        
        if(preciosTable.getTableHeader()!=null)
          preciosTable.getTableHeader().setReorderingAllowed(false);
        preciosTable.setColumnSelectionAllowed(false);
        preciosTable.setCellSelectionEnabled(false);
        preciosTable.getColumnModel().setColumnMargin(1);
        preciosTable.getColumnModel().getColumn(0).setResizable(true);
        preciosTable.getColumnModel().getColumn(1).setResizable(true);
        preciosTable.getColumnModel().getColumn(2).setResizable(true);
        
        
        jScrollPane1.setViewportView(preciosTable);
        
        //vamos a llamar nuestro reloj
        BufferedImage bi=new BufferedImage(relojLabel.getWidth(),relojLabel.getHeight(),BufferedImage.TYPE_INT_RGB);
        float cenx=(float)(relojLabel.getWidth()/2.0f);
        float ceny=(float)(relojLabel.getHeight()/2.0f);
        float r=(float)((relojLabel.getWidth()+relojLabel.getHeight())/4.0);
        float alfaIncrem=(float)(360.0/divisiones);
        //Ahora lo vamos a divir en los segmentos que nos indico el usuario
        Graphics2D graphics=(Graphics2D)bi.getGraphics();
        graphics.drawImage(ImageLoader.images[ImageLoader.CARATULA_RELOJ].getImage(),null,null);
        graphics.setColor(new Color(255,255,128));
        
        if(divisiones>1)
            for(int i=0;i<divisiones;++i)
            {
                float grados=(float)(alfaIncrem*(i+1)*Math.PI/180);
                System.out.println("que onda");
                float x2=cenx+(float)(r*Math.sin(grados));
                float y2=ceny-(float)(r*Math.cos(grados));
                graphics.drawLine((int)cenx,(int)ceny,(int)x2,(int)y2);
                System.out.println("pintando una linea");
            }
        
        graphics.dispose();
        relojLabel.setIcon(new ImageIcon(bi));
        System.out.println("dispose()");
        this.updateUI();
        System.out.println("ya terinamos de pintar las rayas");
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        dividirHoraTxt = new javax.swing.JTextField();
        precioTxt = new javax.swing.JTextField();
        updateBtn = new javax.swing.JButton();
        borrarBtn = new javax.swing.JButton();
        relojLabel = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        preciosTable = new javax.swing.JTable();
        precioHoraTxt = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();

        setLayout(null);

        setPreferredSize(new java.awt.Dimension(570, 270));
        jPanel1.setLayout(null);

        jPanel1.setBorder(getTitBorder1());
        jLabel1.setText("Hora dividida en");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(10, 20, 100, 20);

        dividirHoraTxt.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                dividirHoraTxtKeyReleased(evt);
            }
        });

        jPanel1.add(dividirHoraTxt);
        dividirHoraTxt.setBounds(10, 40, 40, 20);

        precioTxt.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                precioTxtKeyReleased(evt);
            }
        });

        jPanel1.add(precioTxt);
        precioTxt.setBounds(10, 120, 40, 20);

        updateBtn.setMnemonic('c');
        updateBtn.setText("Actualizar");
        updateBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                updateBtnActionPerformed(evt);
            }
        });

        jPanel1.add(updateBtn);
        updateBtn.setBounds(10, 220, 100, 23);

        borrarBtn.setText("Eliminar");
        borrarBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarBtnActionPerformed(evt);
            }
        });

        jPanel1.add(borrarBtn);
        borrarBtn.setBounds(450, 220, 100, 23);

        relojLabel.setMaximumSize(new java.awt.Dimension(200, 188));
        relojLabel.setMinimumSize(new java.awt.Dimension(200, 188));
        relojLabel.setPreferredSize(new java.awt.Dimension(200, 188));
        jPanel1.add(relojLabel);
        relojLabel.setBounds(120, 20, 200, 188);

        preciosTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        preciosTable.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                preciosTablePropertyChange(evt);
            }
        });

        jScrollPane1.setViewportView(preciosTable);

        jPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(330, 20, 220, 190);

        jPanel1.add(precioHoraTxt);
        precioHoraTxt.setBounds(10, 190, 40, 20);

        jLabel2.setText("segmentos");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(60, 40, 60, 20);

        jLabel3.setText("<html>Definir precio <BR>de fracci\u00f3n de<BR>hora</html>");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(10, 70, 100, 50);

        jLabel4.setText("<html>Definir precio de<BR> hora completa</html>");
        jPanel1.add(jLabel4);
        jLabel4.setBounds(10, 150, 100, 30);

        jLabel5.setText("Hora dividida en segmentos");
        jPanel1.add(jLabel5);
        jLabel5.setBounds(140, 220, 170, 20);

        add(jPanel1);
        jPanel1.setBounds(10, 10, 560, 250);

    }// </editor-fold>//GEN-END:initComponents

    private void preciosTablePropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_preciosTablePropertyChange
        //este metodo es para que el pongamos una marca indicando 
        //que se hizo una edicion sobre la tabla.
        //Esta marca la va  a ocupar el metodo que invoca el boton actualizar
        tableEdited=true;
        logger.info("tableEdited="+tableEdited);
    }//GEN-LAST:event_preciosTablePropertyChange

    public boolean tableEdited=false;
    private void precioTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_precioTxtKeyReleased

        if(evt.getKeyCode()==java.awt.event.KeyEvent.VK_ENTER)
        {
        
            updateBtnActionPerformed(null);
        }
    }//GEN-LAST:event_precioTxtKeyReleased

    private void borrarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarBtnActionPerformed

        
        javax.swing.JPanel pan =(javax.swing.JPanel)getParent();
        pan.remove(this);
        if(pan.getComponentCount()>0)
        {
            PrecioHoraSegmentPane previus=(PrecioHoraSegmentPane)pan.getComponent(pan.getComponentCount()-1);
            //previus.getBorrarBtn().setEnabled(true);
        }
        pan.updateUI();
        
    }//GEN-LAST:event_borrarBtnActionPerformed

    public void updateBtnActionPerformed() {
        updateBtnActionPerformed(null);
    }                                          
    private void updateBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateBtnActionPerformed
        Float precio=null;
        Float precioHora=null;
        int npartes=0;
        try{
            precio=new Float(Float.parseFloat(precioTxt.getText()));
            precioHora=new Float(Float.parseFloat(precioHoraTxt.getText()));
            npartes=Integer.parseInt(dividirHoraTxt.getText());
            tarifa=new Tarifa(precioHora.floatValue(),precio.floatValue(),npartes);
            if( ! tableEdited  )///si lo que
                setTarifaIntervalos(npartes, precio);
            //despues de que ya se llenaron las celdas con los precios tarifarios,
            //ahora tenemos que recuperar esa columna con los precios.
            int nrows=defTableModel1.getRowCount();
            float[] preciosEnTabla=new float[nrows];
            for(int i=0;i<preciosEnTabla.length;++i)
            {
                String arg1=(String)defTableModel1.getValueAt(i,2);
                preciosEnTabla[i]=Float.parseFloat(arg1);
            
            }
            tarifa.setPreciosEnTabla(preciosEnTabla);
            
        
        }
        catch(NumberFormatException ex)
        {
            precio=null;
            JOptionPane.showMessageDialog(this,"Algunos campos no se llenaron correctamente en la tarifa-"+ex.getMessage(),"Verifique los datos proporcionados",JOptionPane.ERROR_MESSAGE);
        }
            
        logger.info("Tarifa actualizada");
        Tarifa.loggerHoras();
        
    }//GEN-LAST:event_updateBtnActionPerformed

    private void dividirHoraTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_dividirHoraTxtKeyReleased

        if(evt.getKeyCode()==java.awt.event.KeyEvent.VK_ENTER)
        {
        
            updateBtnActionPerformed(null);
        }
        tableEdited=false;
    }//GEN-LAST:event_dividirHoraTxtKeyReleased
    JButton getBorrarBtn()
    {
        return borrarBtn;
    }
    /////////////////////////////////
    ////sets y gets

    public Tarifa getTarifa() {
        return tarifa;
    }
    public void setTarifa(Tarifa tarifa) {
        this.tarifa = tarifa;
    }

    public JTextField getDividirHoraTxt() {
        return dividirHoraTxt;
    }
    public void setDividirHoraTxt(String dividirHoraTxt) {
        this.dividirHoraTxt.setText(dividirHoraTxt);
    }

    public void setPrecioTxt(String precioHoraTxt) {
        this.precioHoraTxt.setText(precioHoraTxt);
    }
    public JTextField getPrecioTxt() {
        return precioTxt;
    }

    public void setPrecioHoraTxt(String precioHoraTxt) {
        this.precioHoraTxt.setText(precioHoraTxt);
    }
    public JTextField getPrecioHoraTxt() {
        return precioHoraTxt;
    }




    



    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton borrarBtn;
    private javax.swing.JTextField dividirHoraTxt;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField precioHoraTxt;
    private javax.swing.JTextField precioTxt;
    private javax.swing.JTable preciosTable;
    private javax.swing.JLabel relojLabel;
    private javax.swing.JButton updateBtn;
    // End of variables declaration//GEN-END:variables
    
}
